package num3;

import java.util.HashSet;

public class MaxLianXuList {
    public int longestConsecutive(int[] nums) {
        //使用set来简化从集合中查找元素的操作
        HashSet<Integer> hashSet = new HashSet<>();
        for (int num : nums) {
            hashSet.add(num);
        }
        //最长的序列
        int longest = 0;

        for (int num : hashSet) {
            /**
             * 判断是否需要跳过该次循环，首先我们需要知道如果是连续的一个序列，那么元素一定是x，x+1，x+2.。。。。，即任意两数差值一定为1.
             * 那么如果我们每次都从当前数开始遍历那么一定会出现-----假设ints = {1，2，3，4}从1开始遍历{1，2，3，4}，从2开始遍历{2，3，4}。。
             * 随后在判断最长位{1，2，3，4}，我们可以发现后面的几次遍历都是没有必要的，所以我们需要考虑如何跳过不必要的循环
             * 我们可以发现如果是重复的遍历的话，那么当前元素x的前一个元素也就是x-1一定存在在集合中，所以我们只需要判断x-1是否存在，如果存在则跳过当前遍历
             */
            if (!hashSet.contains(num - 1)) {
                //当前元素
                int currentNum = num;

                int currentLong = 1;

                while (hashSet.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentLong += 1;
                }

                longest = Math.max(longest, currentLong);
            }
        }

        return longest;

    }
}
